# 阶段1: 构建环境 (使用官方Go镜像)
FROM golang:1.24-alpine AS builder 
 
# 安装必要的构建工具（如git） 
RUN apk add --no-cache git 
 
# 设置工作目录 
WORKDIR /app 
 
# 复制go.mod 和go.sum 文件（利用Docker缓存层加速构建）
COPY go.mod  go.sum  ./

# 设置官方中国镜像（七牛云）
RUN go env -w GOPROXY=https://goproxy.cn,direct  

RUN go mod download 
 
# 复制源代码 
COPY . .
 
# 构建二进制文件（禁用CGO并静态链接）
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o /gin-app 
 
# 阶段2: 运行环境 (使用scratch或alpine最小镜像)
FROM alpine:3.18 
 
# 安装CA证书（用于HTTPS请求）
RUN apk add --no-cache ca-certificates tzdata 
 
# 从构建阶段复制二进制文件 
COPY --from=builder /gin-app /gin-app 
 
# 复制静态文件/模板（如果有）
# COPY --from=builder /app/templates /templates 
# COPY --from=builder /app/static /static 
 
# 设置动态端口（可通过-e PORT=xxx覆盖）
ENV PORT=8080 
EXPOSE $PORT 
 
# 健康检查 
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
    CMD wget -qO- http://10.120.137.235:$PORT/health || exit 1 
 
# 非root用户运行（安全最佳实践）
RUN adduser -D -g '' appuser 
USER appuser 
 
# 启动应用 
CMD ["/gin-app"]